///*
// *               In the name of Allah
// * This file is part of The Zekr Project. Use is subject to
// * license terms.
// *
// * Author:         Mohsen Saboorian
// * Start Date:     July 5, 2012
// */
//package net.sf.zekr.ui;
//
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map.Entry;
//
//import jxgrabkey.HotkeyConflictException;
//import jxgrabkey.JXGrabKey;
//import net.sf.zekr.common.ZekrBaseRuntimeException;
//import net.sf.zekr.common.config.KeyboardAction;
//import net.sf.zekr.common.config.KeyboardShortcut;
//import net.sf.zekr.engine.log.Logger;
//
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.widgets.Display;
//
///**
// * Incomplete.
// * 
// * @author Mohsen Saboorian
// */
//public class LinuxNativeKeyboardListener implements NativeKeyboardListener {
//   private Logger logger = Logger.getLogger(LinuxNativeKeyboardListener.class);
//
//   private List<KeyboardAction> superGlobalActionList = new ArrayList<KeyboardAction>();
//
//   public LinuxNativeKeyboardListener() {
//      try {
//         // Load JNI library
//         System.load(new File("lib/libjxgrabkey.so").getCanonicalPath());
//      } catch (Throwable ex) {
//         try {
//            String jarPath = "jxgrabkey/";
//            String tmpDir = System.getProperty("java.io.tmpdir");
//            try {
//               String dll = "libjxgrabkey.so";
//               fromJarToFs(jarPath + dll, tmpDir + dll);
//               System.load(tmpDir + dll);
//            } catch (UnsatisfiedLinkError e) {
//               String dll = "libjxgrabkey64.so";
//               fromJarToFs(jarPath + dll, tmpDir + dll);
//               System.load(tmpDir + dll);
//            }
//         } catch (Throwable ex2) {
//            throw new ZekrBaseRuntimeException("Could not load JIntellitype.dll from local file system or from inside JAR", ex2);
//         }
//      }
//   }
//
//   /**
//    * Pulls a file out of the JAR and puts it on the File Path.
//    * <p>
//    * 
//    * @param jarPath the path to the JAR
//    * @param filePath the file path to extract to
//    * @throws IOException if any IO error occurs
//    */
//   private void fromJarToFs(String jarPath, String filePath) throws IOException {
//      File file = new File(filePath);
//      if (file.exists()) {
//         boolean success = file.delete();
//         if (!success) {
//            throw new IOException("couldn't delete " + filePath);
//         }
//      }
//      InputStream is = null;
//      OutputStream os = null;
//      try {
//         is = ClassLoader.getSystemClassLoader().getResourceAsStream(jarPath);
//         os = new FileOutputStream(filePath);
//         byte[] buffer = new byte[8192];
//         int bytesRead;
//         while ((bytesRead = is.read(buffer)) != -1) {
//            os.write(buffer, 0, bytesRead);
//         }
//      } finally {
//         if (is != null) {
//            is.close();
//         }
//         if (os != null) {
//            os.close();
//         }
//      }
//   }
//
//   @Override
//   public void install(final Display display, final QuranFormController qfc, KeyboardShortcut shortcut) {
//      for (Entry<String, Integer> e : shortcut.getActionToKey().entrySet()) {
//         List<KeyboardAction> al = shortcut.getKeyActionList(e.getValue());
//         for (KeyboardAction keyboardAction : al) {
//            if (keyboardAction.superGlobal) {
//               String keyStr = KeyboardShortcut.keyCodeToString(keyboardAction.key);
//               logger.debug(String.format("Registering super global shortcut for %s: %s", keyboardAction, keyStr));
//
//               try {
//                  JXGrabKey.getInstance().registerAwtHotkey(superGlobalActionList.size(),
//                        KeyCodeTranslator.translateSWTModifiers(SWT.CTRL), KeyCodeTranslator.translateSWTKey(SWT.F8));
//               } catch (HotkeyConflictException e1) {
//               }
//               // jIntellitype.registerHotKey(superGlobalActionList.size(), keyStr);
//               // superGlobalActionList.add(keyboardAction);
//            }
//         }
//      }
//
//      // install super global listeners
//      /*jIntellitype.addHotKeyListener(new HotkeyListener() {
//         @Override
//         public void onHotKey(int identifier) {
//            if (identifier < superGlobalActionList.size()) {
//               KeyboardAction action = superGlobalActionList.get(identifier);
//               logger.debug(String.format("Hotkey detected. id: %s, action: ", identifier, action.action));
//               qfc.executeAction(action.action);
//            }
//         }
//      });*/
//
//      // install media player listeners
//      /*jIntellitype.addIntellitypeListener(new IntellitypeListener() {
//         @Override
//         public void onIntellitype(final int command) {
//            switch (command) {
//            // volume is usually handled by OS, so better not to handle it again inside Zekr
//            case JIntellitype.APPCOMMAND_VOLUME_UP:
//            case JIntellitype.APPCOMMAND_VOLUME_DOWN:
//            case JIntellitype.APPCOMMAND_VOLUME_MUTE:
//
//            case JIntellitype.APPCOMMAND_MEDIA_PREVIOUSTRACK:
//            case JIntellitype.APPCOMMAND_MEDIA_NEXTTRACK:
//            case JIntellitype.APPCOMMAND_MEDIA_STOP:
//            case JIntellitype.APPCOMMAND_MEDIA_PLAY_PAUSE:
//               display.asyncExec(new Runnable() {
//                  @Override
//                  public void run() {
//                     if (command == JIntellitype.APPCOMMAND_MEDIA_PREVIOUSTRACK) {
//                        qfc.playerPrev();
//                     } else if (command == JIntellitype.APPCOMMAND_MEDIA_NEXTTRACK) {
//                        qfc.playerNext();
//                     } else if (command == JIntellitype.APPCOMMAND_MEDIA_STOP) {
//                        qfc.playerStop();
//                     } else if (command == JIntellitype.APPCOMMAND_MEDIA_PLAY_PAUSE) {
//                        qfc.playerTogglePlayPause();
//                     }
//                  }
//               });
//               break;
//            default:
//               break;
//            }
//         }
//      })*/;
//   }
//
//   @Override
//   public void uninstall() {
//      JXGrabKey.getInstance().cleanUp();
//   }
//
//   private static class KeyCodeTranslator {
//      /** Returns the AWT modifier code for an SWT modifier */
//      public static int translateSWTModifiers(int swtModifiers) {
//         int awtModifiers = 0;
//         if ((swtModifiers & SWT.CTRL) > 0)
//            awtModifiers = awtModifiers | java.awt.event.InputEvent.CTRL_MASK;
//         if ((swtModifiers & SWT.SHIFT) > 0)
//            awtModifiers = awtModifiers | java.awt.event.InputEvent.SHIFT_MASK;
//         if ((swtModifiers & SWT.ALT) > 0)
//            awtModifiers = awtModifiers | java.awt.event.InputEvent.ALT_MASK;
//         if ((swtModifiers & SWT.BUTTON1) > 0)
//            awtModifiers = awtModifiers | java.awt.event.InputEvent.BUTTON1_DOWN_MASK;
//         if ((swtModifiers & SWT.BUTTON2) > 0)
//            awtModifiers = awtModifiers | java.awt.event.InputEvent.BUTTON2_DOWN_MASK;
//         if ((swtModifiers & SWT.BUTTON3) > 0)
//            awtModifiers = awtModifiers | java.awt.event.InputEvent.BUTTON3_DOWN_MASK;
//         if ((swtModifiers & SWT.COMMAND) > 0)
//            awtModifiers = awtModifiers | java.awt.event.InputEvent.META_MASK;
//         return awtModifiers;
//      }
//
//      /** Returns the AWT key code for an SWT key */
//      public static int translateSWTKey(int swtKey) {
//         int awt = 0;
//         for (int i = 1; i < translationMap.length; i += 2) {
//            if (translationMap[i] == swtKey) {
//               awt = translationMap[i - 1];
//               break;
//            }
//         }
//         return awt;
//      }
//
//      /** Returns the SWT key code for an AWT key */
//      public static int translateAWTKey(int awtKey) {
//         int swt = 0;
//         for (int i = 0; i < translationMap.length; i += 2) {
//            if (translationMap[i] == awtKey) {
//               swt = translationMap[i + 1];
//               break;
//            }
//         }
//         return swt;
//      }
//
//      private static final int VK_ENTER = '\n';
//      private static final int VK_BACK_SPACE = '\b';
//      private static final int VK_TAB = '\t';
//      private static final int VK_CANCEL = 0x03;
//      private static final int VK_CLEAR = 0x0C;
//      private static final int VK_SHIFT = 0x10;
//      private static final int VK_CONTROL = 0x11;
//      private static final int VK_ALT = 0x12;
//      private static final int VK_PAUSE = 0x13;
//      private static final int VK_CAPS_LOCK = 0x14;
//      private static final int VK_ESCAPE = 0x1B;
//      private static final int VK_SPACE = 0x20;
//      private static final int VK_PAGE_UP = 0x21;
//      private static final int VK_PAGE_DOWN = 0x22;
//      private static final int VK_END = 0x23;
//      private static final int VK_HOME = 0x24;
//      private static final int VK_LEFT = 0x25;
//      private static final int VK_UP = 0x26;
//      private static final int VK_RIGHT = 0x27;
//      private static final int VK_DOWN = 0x28;
//      private static final int VK_COMMA = 0x2C;
//      private static final int VK_MINUS = 0x2D;
//      private static final int VK_PERIOD = 0x2E;
//      private static final int VK_SLASH = 0x2F;
//      private static final int VK_0 = 0x30;
//      private static final int VK_1 = 0x31;
//      private static final int VK_2 = 0x32;
//      private static final int VK_3 = 0x33;
//      private static final int VK_4 = 0x34;
//      private static final int VK_5 = 0x35;
//      private static final int VK_6 = 0x36;
//      private static final int VK_7 = 0x37;
//      private static final int VK_8 = 0x38;
//      private static final int VK_9 = 0x39;
//      private static final int VK_SEMICOLON = 0x3B;
//      private static final int VK_EQUALS = 0x3D;
//      private static final int VK_A = 0x41;
//      private static final int VK_B = 0x42;
//      private static final int VK_C = 0x43;
//      private static final int VK_D = 0x44;
//      private static final int VK_E = 0x45;
//      private static final int VK_F = 0x46;
//      private static final int VK_G = 0x47;
//      private static final int VK_H = 0x48;
//      private static final int VK_I = 0x49;
//      private static final int VK_J = 0x4A;
//      private static final int VK_K = 0x4B;
//      private static final int VK_L = 0x4C;
//      private static final int VK_M = 0x4D;
//      private static final int VK_N = 0x4E;
//      private static final int VK_O = 0x4F;
//      private static final int VK_P = 0x50;
//      private static final int VK_Q = 0x51;
//      private static final int VK_R = 0x52;
//      private static final int VK_S = 0x53;
//      private static final int VK_T = 0x54;
//      private static final int VK_U = 0x55;
//      private static final int VK_V = 0x56;
//      private static final int VK_W = 0x57;
//      private static final int VK_X = 0x58;
//      private static final int VK_Y = 0x59;
//      private static final int VK_Z = 0x5A;
//      private static final int VK_OPEN_BRACKET = 0x5B;
//      private static final int VK_BACK_SLASH = 0x5C;
//      private static final int VK_CLOSE_BRACKET = 0x5D;
//      private static final int VK_NUMPAD0 = 0x60;
//      private static final int VK_NUMPAD1 = 0x61;
//      private static final int VK_NUMPAD2 = 0x62;
//      private static final int VK_NUMPAD3 = 0x63;
//      private static final int VK_NUMPAD4 = 0x64;
//      private static final int VK_NUMPAD5 = 0x65;
//      private static final int VK_NUMPAD6 = 0x66;
//      private static final int VK_NUMPAD7 = 0x67;
//      private static final int VK_NUMPAD8 = 0x68;
//      private static final int VK_NUMPAD9 = 0x69;
//      private static final int VK_MULTIPLY = 0x6A;
//      private static final int VK_ADD = 0x6B;
//      private static final int VK_SEPARATOR = 0x6C;
//      private static final int VK_SUBTRACT = 0x6D;
//      private static final int VK_DECIMAL = 0x6E;
//      private static final int VK_DIVIDE = 0x6F;
//      private static final int VK_DELETE = 0x7F;
//      private static final int VK_NUM_LOCK = 0x90;
//      private static final int VK_SCROLL_LOCK = 0x91;
//      private static final int VK_F1 = 0x70;
//      private static final int VK_F2 = 0x71;
//      private static final int VK_F3 = 0x72;
//      private static final int VK_F4 = 0x73;
//      private static final int VK_F5 = 0x74;
//      private static final int VK_F6 = 0x75;
//      private static final int VK_F7 = 0x76;
//      private static final int VK_F8 = 0x77;
//      private static final int VK_F9 = 0x78;
//      private static final int VK_F10 = 0x79;
//      private static final int VK_F11 = 0x7A;
//      private static final int VK_F12 = 0x7B;
//      private static final int VK_PRINTSCREEN = 0x9A;
//      private static final int VK_INSERT = 0x9B;
//      private static final int VK_HELP = 0x9C;
//      private static final int VK_META = 0x9D;
//      private static final int VK_BACK_QUOTE = 0xC0;
//      private static final int VK_QUOTE = 0xDE;
//      private static final int VK_KP_UP = 0xE0;
//      private static final int VK_KP_DOWN = 0xE1;
//      private static final int VK_KP_LEFT = 0xE2;
//      private static final int VK_KP_RIGHT = 0xE3;
//      private static final int VK_AMPERSAND = 0x96;
//      private static final int VK_ASTERISK = 0x97;
//      private static final int VK_QUOTEDBL = 0x98;
//      private static final int VK_LESS = 0x99;
//      private static final int VK_GREATER = 0xa0;
//      private static final int VK_BRACELEFT = 0xa1;
//      private static final int VK_BRACERIGHT = 0xa2;
//      private static final int VK_AT = 0x0200;
//      private static final int VK_COLON = 0x0201;
//      private static final int VK_CIRCUMFLEX = 0x0202;
//      private static final int VK_DOLLAR = 0x0203;
//      private static final int VK_EURO_SIGN = 0x0204;
//      private static final int VK_EXCLAMATION_MARK = 0x0205;
//      private static final int VK_INVERTED_EXCLAMATION_MARK = 0x0206;
//      private static final int VK_LEFT_PARENTHESIS = 0x0207;
//      private static final int VK_NUMBER_SIGN = 0x0208;
//      private static final int VK_PLUS = 0x0209;
//      private static final int VK_RIGHT_PARENTHESIS = 0x020A;
//      private static final int VK_UNDERSCORE = 0x020B;
//
//      private static final int SWTVK_A = 'A';
//      private static final int SWTVK_B = 'B';
//      private static final int SWTVK_C = 'C';
//      private static final int SWTVK_D = 'D';
//      private static final int SWTVK_E = 'E';
//      private static final int SWTVK_F = 'F';
//      private static final int SWTVK_G = 'G';
//      private static final int SWTVK_H = 'H';
//      private static final int SWTVK_I = 'I';
//      private static final int SWTVK_J = 'J';
//      private static final int SWTVK_K = 'K';
//      private static final int SWTVK_L = 'L';
//      private static final int SWTVK_M = 'M';
//      private static final int SWTVK_N = 'N';
//      private static final int SWTVK_O = 'O';
//      private static final int SWTVK_P = 'P';
//      private static final int SWTVK_Q = 'Q';
//      private static final int SWTVK_R = 'R';
//      private static final int SWTVK_S = 'S';
//      private static final int SWTVK_T = 'T';
//      private static final int SWTVK_U = 'U';
//      private static final int SWTVK_V = 'V';
//      private static final int SWTVK_W = 'W';
//      private static final int SWTVK_X = 'X';
//      private static final int SWTVK_Y = 'Y';
//      private static final int SWTVK_Z = 'Z';
//      private static final int SWTVK_SPACE = ' ';
//      private static final int SWTVK_0 = '0';
//      private static final int SWTVK_1 = '1';
//      private static final int SWTVK_2 = '2';
//      private static final int SWTVK_3 = '3';
//      private static final int SWTVK_4 = '4';
//      private static final int SWTVK_5 = '5';
//      private static final int SWTVK_6 = '6';
//      private static final int SWTVK_7 = '7';
//      private static final int SWTVK_8 = '8';
//      private static final int SWTVK_9 = '9';
//      private static final int SWTVK_SEMICOLON = ';';
//      private static final int SWTVK_EQUALS = '=';
//      private static final int SWTVK_COMMA = ',';
//      private static final int SWTVK_MINUS = '-';
//      private static final int SWTVK_PERIOD = '.';
//      private static final int SWTVK_SLASH = '/';
//      private static final int SWTVK_OPEN_BRACKET = '(';
//      private static final int SWTVK_BACK_SLASH = '\\';
//      private static final int SWTVK_CLOSE_BRACKET = ')';
//      private static final int SWTVK_UNDERSCORE = '_';
//      private static final int SWTVK_ADD = '+';
//      private static final int SWTVK_PLUS = '+';
//      private static final int SWTVK_NUMBER_SIGN = '+';
//      private static final int SWTVK_MULTIPLY = '*';
//      private static final int SWTVK_SUBTRACT = '-';
//      private static final int SWTVK_DECIMAL = '.';
//      private static final int SWTVK_DIVIDE = '.';
//      private static final int SWTVK_BACK_QUOTE = '`';
//      private static final int SWTVK_QUOTE = '\'';
//      private static final int SWTVK_AMPERSAND = '&';
//      private static final int SWTVK_ASTERISK = '*';
//      private static final int SWTVK_QUOTEDBL = '"';
//      private static final int SWTVK_LESS = '<';
//      private static final int SWTVK_GREATER = '>';
//      private static final int SWTVK_BRACELEFT = '{';
//      private static final int SWTVK_BRACERIGHT = '}';
//      private static final int SWTVK_AT = '@';
//      private static final int SWTVK_CIRCUMFLEX = '~';
//      private static final int SWTVK_DOLLAR = '$';
//      private static final int SWTVK_EURO_SIGN = '$';
//      private static final int SWTVK_EXCLAMATION_MARK = '!';
//      private static final int SWTVK_INVERTED_EXCLAMATION_MARK = '!';
//      private static final int SWTVK_LEFT_PARENTHESIS = '(';
//      private static final int SWTVK_RIGHT_PARENTHESIS = ')';
//      private static final int SWTVK_COLON = ':';
//      private static final int SWTVK_TAB = '\t';
//      private static final int SWTVK_F1 = SWT.F1;
//      private static final int SWTVK_F2 = SWT.F2;
//      private static final int SWTVK_F3 = SWT.F3;
//      private static final int SWTVK_F4 = SWT.F4;
//      private static final int SWTVK_F5 = SWT.F5;
//      private static final int SWTVK_F6 = SWT.F6;
//      private static final int SWTVK_F7 = SWT.F7;
//      private static final int SWTVK_F8 = SWT.F8;
//      private static final int SWTVK_F9 = SWT.F9;
//      private static final int SWTVK_F10 = SWT.F10;
//      private static final int SWTVK_F11 = SWT.F11;
//      private static final int SWTVK_F12 = SWT.F12;
//      private static final int SWTVK_ENTER = SWT.CR;
//      private static final int SWTVK_BACK_SPACE = 8;
//      private static final int SWTVK_DELETE = SWT.DEL;
//      private static final int SWTVK_ESCAPE = SWT.ESC;
//
//      // NOTE: I think this is right... should use the arrow ids instead of left/right/etc (intended for alignment)
//      private static final int SWTVK_LEFT = SWT.ARROW_LEFT;
//      private static final int SWTVK_RIGHT = SWT.ARROW_RIGHT;
//      private static final int SWTVK_UP = SWT.ARROW_UP;
//      private static final int SWTVK_DOWN = SWT.ARROW_DOWN;
//      private static final int SWTVK_HOME = SWT.HOME;
//      private static final int SWTVK_END = SWT.END;
//      /*
//      private static final int SWTVK_LEFT = SWT.LEFT;
//      private static final int SWTVK_KP_LEFT = SWT.LEFT;
//      private static final int SWTVK_RIGHT = SWT.RIGHT;
//      private static final int SWTVK_KP_RIGHT = SWT.RIGHT;
//      private static final int SWTVK_UP = SWT.UP;
//      private static final int SWTVK_KP_UP = SWT.UP;
//      private static final int SWTVK_DOWN = SWT.DOWN;
//      private static final int SWTVK_KP_DOWN = SWT.DOWN;
//      private static final int SWTVK_HOME = SWT.HOME;
//      private static final int SWTVK_END = SWT.END;
//      */
//
//      private static final int SWTVK_PAGE_UP = SWT.PAGE_UP;
//      private static final int SWTVK_PAGE_DOWN = SWT.PAGE_DOWN;
//      private static final int SWTVK_INSERT = SWT.INSERT;
//      private static final int SWTVK_SHIFT = SWT.SHIFT;
//      private static final int SWTVK_CONTROL = SWT.CONTROL;
//      private static final int SWTVK_ALT = SWT.ALT;
//      private static final int SWTVK_META = SWT.ALT;
//      private static final int SWTVK_CANCEL = SWT.CANCEL;
//      private static final int SWTVK_CLEAR = SWT.NONE;
//      private static final int SWTVK_PAUSE = SWT.PAUSE;
//      private static final int SWTVK_CAPS_LOCK = SWT.CAPS_LOCK;
//      private static final int SWTVK_SEPARATOR = SWT.SEPARATOR;
//      private static final int SWTVK_NUM_LOCK = SWT.NUM_LOCK;
//      private static final int SWTVK_SCROLL_LOCK = SWT.SCROLL_LOCK;
//      private static final int SWTVK_PRINTSCREEN = SWT.PRINT_SCREEN;
//      private static final int SWTVK_HELP = SWT.HELP;
//
//      /**
//       * Map of SWT key constants to AWT constants. This is to ensure binary compatibility for existing Swing/AWT apps.
//       */
//      private static int[] translationMap = new int[] { VK_ENTER, SWTVK_ENTER, VK_BACK_SPACE, SWTVK_BACK_SPACE, VK_TAB,
//            SWTVK_TAB, VK_CANCEL, SWTVK_CANCEL, VK_CLEAR, SWTVK_CLEAR, VK_SHIFT, SWTVK_SHIFT, VK_CONTROL, SWTVK_CONTROL, VK_ALT,
//            SWTVK_ALT, VK_PAUSE, SWTVK_PAUSE, VK_CAPS_LOCK, SWTVK_CAPS_LOCK, VK_ESCAPE, SWTVK_ESCAPE, VK_SPACE, SWTVK_SPACE,
//            VK_PAGE_UP, SWTVK_PAGE_UP, VK_PAGE_DOWN, SWTVK_PAGE_DOWN, VK_END, SWTVK_END, VK_HOME, SWTVK_HOME, VK_LEFT,
//            SWTVK_LEFT, VK_UP, SWTVK_UP, VK_RIGHT, SWTVK_RIGHT, VK_DOWN, SWTVK_DOWN, VK_COMMA, SWTVK_COMMA, VK_MINUS,
//            SWTVK_MINUS, VK_PERIOD, SWTVK_PERIOD, VK_SLASH, SWTVK_SLASH, VK_0, SWTVK_0, VK_1, SWTVK_1, VK_2, SWTVK_2, VK_3,
//            SWTVK_3, VK_4, SWTVK_4, VK_5, SWTVK_5, VK_6, SWTVK_6, VK_7, SWTVK_7, VK_8, SWTVK_8, VK_9, SWTVK_9, VK_SEMICOLON,
//            SWTVK_SEMICOLON, VK_EQUALS, SWTVK_EQUALS, VK_A, SWTVK_A, VK_B, SWTVK_B, VK_C, SWTVK_C, VK_D, SWTVK_D, VK_E, SWTVK_E,
//            VK_F, SWTVK_F, VK_G, SWTVK_G, VK_H, SWTVK_H, VK_I, SWTVK_I, VK_J, SWTVK_J, VK_K, SWTVK_K, VK_L, SWTVK_L, VK_M,
//            SWTVK_M, VK_N, SWTVK_N, VK_O, SWTVK_O, VK_P, SWTVK_P, VK_Q, SWTVK_Q, VK_R, SWTVK_R, VK_S, SWTVK_S, VK_T, SWTVK_T,
//            VK_U, SWTVK_U, VK_V, SWTVK_V, VK_W, SWTVK_W, VK_X, SWTVK_X, VK_Y, SWTVK_Y, VK_Z, SWTVK_Z, VK_OPEN_BRACKET,
//            SWTVK_OPEN_BRACKET, VK_BACK_SLASH, SWTVK_BACK_SLASH, VK_CLOSE_BRACKET, SWTVK_CLOSE_BRACKET, VK_NUMPAD0, SWTVK_0,
//            VK_NUMPAD1, SWTVK_1, VK_NUMPAD2, SWTVK_2, VK_NUMPAD3, SWTVK_3, VK_NUMPAD4, SWTVK_4, VK_NUMPAD5, SWTVK_5, VK_NUMPAD6,
//            SWTVK_6, VK_NUMPAD7, SWTVK_7, VK_NUMPAD8, SWTVK_8, VK_NUMPAD9, SWTVK_9, VK_MULTIPLY, SWTVK_MULTIPLY, VK_ADD,
//            SWTVK_ADD, VK_SEPARATOR, SWTVK_SEPARATOR, VK_SUBTRACT, SWTVK_SUBTRACT, VK_DECIMAL, SWTVK_DECIMAL, VK_DIVIDE,
//            SWTVK_DIVIDE, VK_DELETE, SWTVK_DELETE, VK_NUM_LOCK, SWTVK_NUM_LOCK, VK_SCROLL_LOCK, SWTVK_SCROLL_LOCK, VK_F1,
//            SWTVK_F1, VK_F2, SWTVK_F2, VK_F3, SWTVK_F3, VK_F4, SWTVK_F4, VK_F5, SWTVK_F5, VK_F6, SWTVK_F6, VK_F7, SWTVK_F7,
//            VK_F8, SWTVK_F8, VK_F9, SWTVK_F9, VK_F10, SWTVK_F10, VK_F11, SWTVK_F11, VK_F12, SWTVK_F12, VK_PRINTSCREEN,
//            SWTVK_PRINTSCREEN, VK_INSERT, SWTVK_INSERT, VK_HELP, SWTVK_HELP, VK_META, SWTVK_META, VK_BACK_QUOTE,
//            SWTVK_BACK_QUOTE, VK_QUOTE, SWTVK_QUOTE, VK_KP_UP, SWTVK_UP, VK_KP_DOWN, SWTVK_DOWN, VK_KP_LEFT, SWTVK_LEFT,
//            VK_KP_RIGHT, SWTVK_RIGHT, VK_AMPERSAND, SWTVK_AMPERSAND, VK_ASTERISK, SWTVK_ASTERISK, VK_QUOTEDBL, SWTVK_QUOTEDBL,
//            VK_LESS, SWTVK_LESS, VK_GREATER, SWTVK_GREATER, VK_BRACELEFT, SWTVK_BRACELEFT, VK_BRACERIGHT, SWTVK_BRACERIGHT,
//            VK_AT, SWTVK_AT, VK_COLON, SWTVK_COLON, VK_CIRCUMFLEX, SWTVK_CIRCUMFLEX, VK_DOLLAR, SWTVK_DOLLAR, VK_EURO_SIGN,
//            SWTVK_EURO_SIGN, VK_EXCLAMATION_MARK, SWTVK_EXCLAMATION_MARK, VK_INVERTED_EXCLAMATION_MARK,
//            SWTVK_INVERTED_EXCLAMATION_MARK, VK_LEFT_PARENTHESIS, SWTVK_LEFT_PARENTHESIS, VK_NUMBER_SIGN, SWTVK_NUMBER_SIGN,
//            VK_PLUS, SWTVK_PLUS, VK_RIGHT_PARENTHESIS, SWTVK_RIGHT_PARENTHESIS, VK_UNDERSCORE, SWTVK_UNDERSCORE, VK_A,
//            SWTVK_A + 32, VK_B, SWTVK_B + 32, VK_C, SWTVK_C + 32, VK_D, SWTVK_D + 32, VK_E, SWTVK_E + 32, VK_F, SWTVK_F + 32,
//            VK_G, SWTVK_G + 32, VK_H, SWTVK_H + 32, VK_I, SWTVK_I + 32, VK_J, SWTVK_J + 32, VK_K, SWTVK_K + 32, VK_L,
//            SWTVK_L + 32, VK_M, SWTVK_M + 32, VK_N, SWTVK_N + 32, VK_O, SWTVK_O + 32, VK_P, SWTVK_P + 32, VK_Q, SWTVK_Q + 32,
//            VK_R, SWTVK_R + 32, VK_S, SWTVK_S + 32, VK_T, SWTVK_T + 32, VK_U, SWTVK_U + 32, VK_V, SWTVK_V + 32, VK_W,
//            SWTVK_W + 32, VK_X, SWTVK_X + 32, VK_Y, SWTVK_Y + 32, VK_Z, SWTVK_Z + 32, };
//   }
//
//}
